package myjiava6.com;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
 
public class Rl
{
	/*写出一年中每个月都是多少号结尾的
	 * 注意二月28~29
	 */
    /**
     * 
     */
    private static int[] DAYS = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    public static void main(String[] args) 
    {
    	System.out.println("==小日历开始==");
    	/*返回当前时间  Static 直接调用*/
        //long l1 = System.currentTimeMillis();
        /*创建容器 参数是 今年  第一个月   今年 最后一个月*/
        List data = rili(2018, 1, 2018, 12);
        /*返回程序执行后的时间  static 直接调用*/
        //long l2 = System.currentTimeMillis();
 
        for (int i = 0; i < data.size(); i++) 
        {
            System.out.println(data.get(i));
        }
        //System.out.println((l2 - l1) + "==程序耗时==");
    }
    /*startYear 开始年  endYear	 结束年
     *startMoth 开始月  endMonth 结束月
     * */
    private static List rili(int 年开始, int 月开始, int 年结束, int 月结束)
    {
    	/*年月是从小到大排列的  所以年份是越小越靠前
    	 *当年份相等的时候 月份也是越小越靠前
    	 */
        if (年开始 > 年结束 || (年开始 == 年结束 && 月开始 > 月结束))
        {
            return null;
        }
        /*创建容器对象*/
        List ls = new ArrayList();
        /*循环容器内容*/
        for (int i = 年开始; i <= 年结束; i++)
        {
 
            int startM = 月开始 - 1;
            int endM = 月结束 - 1;
            /**/
            if (年开始 < 年结束) 
            {
                if (i == 年结束) 
                {
                    endM = 11;
                } else 
                {
                    startM = 0;
                }
            }
            for (int j = startM; j <= endM; j++) 
            {	
            	/*打印今年  第几个月*/
                ls.add("-----------------------" + i + "年" + (j+ 1) + "月-----------------------");
                /*星期日 ···星期六*/
                ls.add("日\t一\t二\t三\t四\t五\t六");
 
                int day = days(i, j);
                StringBuffer buf = new StringBuffer();
                /*月份中没有零  所以要从一开始*/
                int idx = 1;
                int io = 0;
                while (idx <= day)
                {
                    int len = 0;
                    if (idx == 1)
                    {
                    	/*创建一个时间的对象
                    	 *calendar 是接口不能new
                    	 *系统提供方法 */
                        Calendar c = Calendar.getInstance();
                        /*设定 年， 月， 日*/
                        c.set(i, j, 1);
                        /*指定天数所对应的星期*/
                        int xingqi = c.get(Calendar.DAY_OF_WEEK);
                        /*赋值*/
                        len = xingqi;
                        for (int k =0; k < len ; k++) 
                        {
                        	/*if(len >= 7)
                        	{
                        		buf.append("\t");
                        	}else
                        	{
                        		continue;
                        	}*/
                        	buf.append("\t");
                        	io++;
                        }
                    }
                    buf.append(idx+"\t");
                    if((idx+io)%7==0 && (idx+io) >=7 )
                    {
                    	buf.append("\n");
                    }	
                    idx++;
                }
                ls.add(buf);
            }
        }
        return ls;
    }
    public static int days(int year, int month) 
    {
 
        if (month != 1)
        {
            return DAYS[month];
        }
        /*判定 今年是不是闰年  闰年2月有29天 其他都是二十八天*/
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        {
            return 29;
        }
        return DAYS[month];
    }
}